Newer
Older
Simple-Multiplayer-Unity3D / Multiplayer Project / Library / PackageCache / com.unity.collab-proxy@2.7.1 / Editor / AssetMenu / AssetMenuItems.cs
  1. using UnityEditor.VersionControl;
  2. using Codice.CM.Common;
  3. using Codice.Client.Common.EventTracking;
  4. using Codice.LogWrapper;
  5. using PlasticGui;
  6. using PlasticGui.WorkspaceWindow;
  7. using PlasticGui.WorkspaceWindow.Items;
  8. using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
  9. using Unity.PlasticSCM.Editor.AssetUtils.Processor;
  10. using Unity.PlasticSCM.Editor.UI;
  11. using Unity.PlasticSCM.Editor.Tool;
  12. namespace Unity.PlasticSCM.Editor.AssetMenu
  13. {
  14. internal class AssetMenuItems
  15. {
  16. internal static void Enable(
  17. WorkspaceInfo wkInfo,
  18. IAssetStatusCache assetStatusCache)
  19. {
  20. if (mIsEnabled)
  21. return;
  22. mLog.Debug("Enable");
  23. mWkInfo = wkInfo;
  24. mAssetStatusCache = assetStatusCache;
  25. mIsEnabled = true;
  26. mAssetSelection = new ProjectViewAssetSelection(UpdateFilterMenuItems);
  27. mAssetMenuCopyPathOperation = new AssetCopyPathOperation(
  28. wkInfo.ClientPath,
  29. assetStatusCache,
  30. mAssetSelection);
  31. mFilterMenuBuilder = new AssetFilesFilterPatternsMenuBuilder(
  32. IGNORE_MENU_ITEMS_PRIORITY,
  33. HIDDEN_MENU_ITEMS_PRIORITY);
  34. AddMenuItems();
  35. }
  36. internal static void Disable()
  37. {
  38. mLog.Debug("Disable");
  39. mIsEnabled = false;
  40. RemoveMenuItems();
  41. if (mAssetSelection != null)
  42. mAssetSelection.Dispose();
  43. mWkInfo = null;
  44. mAssetStatusCache = null;
  45. mAssetSelection = null;
  46. mFilterMenuBuilder = null;
  47. mAssetMenuVcsOperations = null;
  48. mAssetMenuCopyPathOperation = null;
  49. }
  50. internal static void BuildOperations(
  51. WorkspaceInfo wkInfo,
  52. WorkspaceWindow workspaceWindow,
  53. IViewSwitcher viewSwitcher,
  54. IHistoryViewLauncher historyViewLauncher,
  55. GluonGui.ViewHost viewHost,
  56. WorkspaceOperationsMonitor workspaceOperationsMonitor,
  57. PlasticGui.WorkspaceWindow.NewIncomingChangesUpdater incomingChangesUpdater,
  58. ShelvedChangesUpdater shelvedChangesUpdater,
  59. IAssetStatusCache assetStatusCache,
  60. IMergeViewLauncher mergeViewLauncher,
  61. PlasticGui.Gluon.IGluonViewSwitcher gluonViewSwitcher,
  62. LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
  63. bool isGluonMode)
  64. {
  65. if (!mIsEnabled)
  66. Enable(wkInfo, assetStatusCache);
  67. AssetVcsOperations assetVcsOperations = new AssetVcsOperations(
  68. wkInfo,
  69. workspaceWindow,
  70. viewSwitcher,
  71. historyViewLauncher,
  72. viewHost,
  73. workspaceOperationsMonitor,
  74. incomingChangesUpdater,
  75. shelvedChangesUpdater,
  76. mAssetStatusCache,
  77. mergeViewLauncher,
  78. gluonViewSwitcher,
  79. mAssetSelection,
  80. showDownloadPlasticExeWindow,
  81. isGluonMode);
  82. mAssetMenuVcsOperations = assetVcsOperations;
  83. mFilterMenuBuilder.SetOperations(assetVcsOperations);
  84. }
  85. static void RemoveMenuItems()
  86. {
  87. mFilterMenuBuilder.RemoveMenuItems();
  88. HandleMenuItem.RemoveMenuItem(
  89. PlasticLocalization.GetString(PlasticLocalization.Name.PrefixUnityVersionControlMenu));
  90. HandleMenuItem.UpdateAllMenus();
  91. }
  92. static void UpdateFilterMenuItems()
  93. {
  94. AssetList assetList = ((AssetVcsOperations.IAssetSelection)
  95. mAssetSelection).GetSelectedAssets();
  96. SelectedPathsGroupInfo info = AssetsSelection.GetSelectedPathsGroupInfo(
  97. mWkInfo.ClientPath, assetList, mAssetStatusCache);
  98. FilterMenuActions actions =
  99. assetList.Count != info.SelectedCount ?
  100. new FilterMenuActions() :
  101. FilterMenuUpdater.GetMenuActions(info);
  102. mFilterMenuBuilder.UpdateMenuItems(actions);
  103. }
  104. static void AddMenuItems()
  105. {
  106. // TODO: Try removing this
  107. // Somehow first item always disappears. So this is a filler item
  108. HandleMenuItem.AddMenuItem(
  109. GetPlasticMenuItemName(PlasticLocalization.Name.PendingChangesPlasticMenu),
  110. PENDING_CHANGES_MENU_ITEM_PRIORITY,
  111. PendingChanges, ValidatePendingChanges);
  112. HandleMenuItem.AddMenuItem(
  113. GetPlasticMenuItemName(PlasticLocalization.Name.PendingChangesPlasticMenu),
  114. PENDING_CHANGES_MENU_ITEM_PRIORITY,
  115. PendingChanges, ValidatePendingChanges);
  116. HandleMenuItem.AddMenuItem(
  117. GetPlasticMenuItemName(PlasticLocalization.Name.AddPlasticMenu),
  118. ADD_MENU_ITEM_PRIORITY,
  119. Add, ValidateAdd);
  120. HandleMenuItem.AddMenuItem(
  121. GetPlasticMenuItemName(PlasticLocalization.Name.CheckoutPlasticMenu),
  122. CHECKOUT_MENU_ITEM_PRIORITY,
  123. Checkout, ValidateCheckout);
  124. HandleMenuItem.AddMenuItem(
  125. GetPlasticMenuItemName(PlasticLocalization.Name.CheckinPlasticMenu),
  126. CHECKIN_MENU_ITEM_PRIORITY,
  127. Checkin, ValidateCheckin);
  128. HandleMenuItem.AddMenuItem(
  129. GetPlasticMenuItemName(PlasticLocalization.Name.UndoPlasticMenu),
  130. UNDO_MENU_ITEM_PRIORITY,
  131. Undo, ValidateUndo);
  132. HandleMenuItem.AddMenuItem(
  133. GetPlasticMenuItemName(PlasticLocalization.Name.CopyFilePathMenuItem),
  134. COPY_FILE_PATH_MENU_ITEM_PRIORITY,
  135. CopyFilePath,
  136. ValidateCopyFilePath);
  137. HandleMenuItem.AddMenuItem(
  138. GetPlasticMenuItemName(PlasticLocalization.Name.CopyRelativeFilePathMenuItem),
  139. COPY_RELATIVE_FILE_PATH_MENU_ITEM_PRIORITY,
  140. CopyRelativeFilePath,
  141. ValidateCopyFilePath);
  142. UpdateFilterMenuItems();
  143. HandleMenuItem.AddMenuItem(
  144. GetPlasticMenuItemName(PlasticLocalization.Name.DiffPlasticMenu),
  145. GetPlasticShortcut.ForAssetDiff(),
  146. DIFF_MENU_ITEM_PRIORITY,
  147. Diff, ValidateDiff);
  148. HandleMenuItem.AddMenuItem(
  149. GetPlasticMenuItemName(PlasticLocalization.Name.HistoryPlasticMenu),
  150. GetPlasticShortcut.ForHistory(),
  151. HISTORY_MENU_ITEM_PRIORITY,
  152. History, ValidateHistory);
  153. HandleMenuItem.UpdateAllMenus();
  154. }
  155. static void PendingChanges()
  156. {
  157. ShowWindow.Plastic();
  158. mAssetMenuVcsOperations.ShowPendingChanges();
  159. }
  160. static bool ValidatePendingChanges()
  161. {
  162. return true;
  163. }
  164. static void Add()
  165. {
  166. if (mAssetMenuVcsOperations == null)
  167. ShowWindow.Plastic();
  168. mAssetMenuVcsOperations.Add();
  169. }
  170. static bool ValidateAdd()
  171. {
  172. return ShouldMenuItemBeEnabled(
  173. mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
  174. AssetMenuOperations.Add);
  175. }
  176. static void Checkout()
  177. {
  178. if (mAssetMenuVcsOperations == null)
  179. ShowWindow.Plastic();
  180. mAssetMenuVcsOperations.Checkout();
  181. }
  182. static bool ValidateCheckout()
  183. {
  184. return ShouldMenuItemBeEnabled(
  185. mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
  186. AssetMenuOperations.Checkout);
  187. }
  188. static void Checkin()
  189. {
  190. TrackFeatureUseEvent.For(
  191. PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
  192. TrackFeatureUseEvent.Features.ContextMenuCheckinOption);
  193. if (mAssetMenuVcsOperations == null)
  194. ShowWindow.Plastic();
  195. mAssetMenuVcsOperations.Checkin();
  196. }
  197. static bool ValidateCheckin()
  198. {
  199. return ShouldMenuItemBeEnabled(
  200. mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
  201. AssetMenuOperations.Checkin);
  202. }
  203. static void Undo()
  204. {
  205. if (mAssetMenuVcsOperations == null)
  206. ShowWindow.Plastic();
  207. mAssetMenuVcsOperations.Undo();
  208. }
  209. static bool ValidateUndo()
  210. {
  211. return ShouldMenuItemBeEnabled(
  212. mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
  213. AssetMenuOperations.Undo);
  214. }
  215. static void CopyFilePath()
  216. {
  217. mAssetMenuCopyPathOperation.CopyFilePath(relativePath: false);
  218. }
  219. static void CopyRelativeFilePath()
  220. {
  221. mAssetMenuCopyPathOperation.CopyFilePath(relativePath: true);
  222. }
  223. static bool ValidateCopyFilePath()
  224. {
  225. return ShouldMenuItemBeEnabled(
  226. mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
  227. AssetMenuOperations.CopyFilePath);
  228. }
  229. static void Diff()
  230. {
  231. if (mAssetMenuVcsOperations == null)
  232. ShowWindow.Plastic();
  233. mAssetMenuVcsOperations.ShowDiff();
  234. }
  235. static bool ValidateDiff()
  236. {
  237. return ShouldMenuItemBeEnabled(
  238. mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
  239. AssetMenuOperations.Diff);
  240. }
  241. static void History()
  242. {
  243. ShowWindow.Plastic();
  244. mAssetMenuVcsOperations.ShowHistory();
  245. }
  246. static bool ValidateHistory()
  247. {
  248. return ShouldMenuItemBeEnabled(
  249. mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
  250. AssetMenuOperations.History);
  251. }
  252. static bool ShouldMenuItemBeEnabled(
  253. string wkPath,
  254. AssetVcsOperations.IAssetSelection assetSelection,
  255. IAssetStatusCache statusCache,
  256. AssetMenuOperations operation)
  257. {
  258. AssetList assetList = assetSelection.GetSelectedAssets();
  259. if (assetList.Count == 0)
  260. return false;
  261. SelectedAssetGroupInfo selectedGroupInfo = SelectedAssetGroupInfo.
  262. BuildFromAssetList(wkPath, assetList, statusCache);
  263. if (assetList.Count != selectedGroupInfo.SelectedCount)
  264. return false;
  265. AssetMenuOperations operations = AssetMenuUpdater.
  266. GetAvailableMenuOperations(selectedGroupInfo);
  267. return operations.HasFlag(operation);
  268. }
  269. static string GetPlasticMenuItemName(PlasticLocalization.Name name)
  270. {
  271. return string.Format("{0}/{1}",
  272. PlasticLocalization.GetString(PlasticLocalization.Name.PrefixUnityVersionControlMenu),
  273. PlasticLocalization.GetString(name));
  274. }
  275. static IAssetMenuVCSOperations mAssetMenuVcsOperations;
  276. static IAssetMenuCopyPathOperation mAssetMenuCopyPathOperation;
  277. static ProjectViewAssetSelection mAssetSelection;
  278. static AssetFilesFilterPatternsMenuBuilder mFilterMenuBuilder;
  279. static bool mIsEnabled;
  280. static IAssetStatusCache mAssetStatusCache;
  281. static WorkspaceInfo mWkInfo;
  282. #if UNITY_6000_0_OR_NEWER
  283. // Puts Unity Version Control in a new section, as it precedes the Create menu with the old value
  284. const int BASE_MENU_ITEM_PRIORITY = 71;
  285. #else
  286. // Puts Unity Version Control right below the Create menu
  287. const int BASE_MENU_ITEM_PRIORITY = 19;
  288. #endif
  289. // incrementing the "order" param by 11 causes the menu system to add a separator
  290. const int PENDING_CHANGES_MENU_ITEM_PRIORITY = BASE_MENU_ITEM_PRIORITY;
  291. const int ADD_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 11;
  292. const int CHECKOUT_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 12;
  293. const int CHECKIN_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 13;
  294. const int UNDO_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 14;
  295. const int COPY_FILE_PATH_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 25;
  296. const int COPY_RELATIVE_FILE_PATH_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 26;
  297. const int IGNORE_MENU_ITEMS_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 37;
  298. const int HIDDEN_MENU_ITEMS_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 38;
  299. const int DIFF_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 49;
  300. const int HISTORY_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 50;
  301. static readonly ILog mLog = PlasticApp.GetLogger("AssetMenuItems");
  302. }
  303. }